# 导入蓝图
from flask import Blueprint,request
from flask.json import jsonify
from flask.wrappers import Request

# 操作数据库需要要到的包 装饰一下
from conf.comm import sqlalchemy_context

# 导入数据库
from database import *

# 导入json
import json

# 注册蓝图 实例化
bp_course = Blueprint('course',__name__)
# 构造无限级分类
def xtree(data):
    tree={}
    list=[]
    if data:
        # 先解析成字典   
        for i in data: # 先循环
            # 然后以键值对的形式读取数据 id为key键 整条数据为值values
            tree[i['id']]=i
        
        # 开始下一层循环
        for j in data:
            # 先判断j有没有父类
            if j['parent'] == 0:
                list.append(j)
            else:
                # 有父类
                # 看一下父类下是否有子类，如果有直接添加，没有的话建一个用来放子类的列表
                if 'son' not in tree[j['parent']]:
                    tree[j['parent']]['son']=[]
                # 把子类加到特定的父类下
                tree[j['parent']]['son'].append(j)
        return list
                

            
        
        
    else:
        return data

# 添加分类
@bp_course.route('/cateM',methods=['POST','GET'])
# 这一行不太清除methos
@sqlalchemy_context()
def cateM():
    if request.method=="POST":
        try:
            # 获取用户输入
            data = request.data
            # 如果data存在
            if data:
                # 用json转一下
                data=json.loads(data)
                # 如果没有data 就用from获取
            else:
                data=request.form
            # 构造对象
            cate=Cate(name=data['name'],level=data['level'],parent=data['parent'],params=data['params'])
            # 添加
            db.session.add(cate)
            # 提交
            db.session.commit()
            # 返回结果
            return jsonify({'code':200})

        except:
            return jsonify({'code':10010})

    else:
        # 获取所有分类并解析
        list=[]
        cates=Cate.query.all()
        # 如果cates存在的话
        if cates:
            # 循环
            for i in cates:
                dict={'id':i.id,'name':i.name,'level':i.level,'parent':i.parent,'params':i.params}
                list.append(dict)
            list1=xtree(list)
            return jsonify({"code":200,'list':list1})
